# _*_ coding: UTF-8 _*_
# @Time     : 2021/11/2 11:29
# @Author   : Gong Yangyi
# @Site     : http://www.hzdledu.cn/
# @File     : w3s2_动作链条.py
# @Software : PyCharm
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains


# ActionChains动作链条
# 可以实现基本操作，还可以实现鼠标的操作等高级动作，可以将多个动作连接为一个动作链条
# 最后一定要加.perform()才会执行

def foo1():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://map.baidu.com/@13373075,3519024,17z')
    time.sleep(3)

    # 模拟鼠标的右键
    # 参数：element=None，1.指定点击的元素，2.如果参数为空，点击鼠标当前位置（当没有代码移动鼠标，鼠标在0，0点）
    ActionChains(driver).context_click().perform()
    time.sleep(1)

    # 模拟鼠标左键双击
    # 参数：element=None，1.指定点击的元素，2.如果参数为空，点击鼠标当前位置（当没有代码移动鼠标，鼠标在0，0点）
    ActionChains(driver).double_click().perform()
    time.sleep(1)

    # 模拟按住鼠标左键不放
    # 参数：element=None，1.指定点击的元素，2.如果参数为空，点击鼠标当前位置（当没有代码移动鼠标，鼠标在0，0点）
    ActionChains(driver).click_and_hold().perform()
    time.sleep(1)

    # 移动鼠标
    # move_by_offset(xoffset,yoffset):xoffset,x轴移动距离；yoffset，y轴移动距离
    ActionChains(driver).move_by_offset(500, 0).perform()
    # move_to_element(source,target)  移动鼠标到某个元素
    time.sleep(1)

    # 释放鼠标
    ActionChains(driver).release().perform()

    # 拖拽鼠标
    # drag_and_drop_by_offset(element, xoffset, yoffset):element被拖拽的元素;xoffset,x轴移动距离；yoffset，y轴移动距离
    ActionChains(driver).drag_and_drop_by_offset(None, -500, 0).perform()
    time.sleep(1)

    # 动作链条
    # 多个动作通过.连接成动作链条，最后.perform()执行
    ActionChains(driver).click_and_hold().pause(1).move_by_offset(500, 0).pause(1).release().perform()
    time.sleep(1)

    # 模拟键盘输入
    ActionChains(driver).send_keys_to_element(driver.find_element_by_id('sole-input'), '成都汇智动力').perform()
    time.sleep(1)

    # 模拟鼠标左键单击
    ActionChains(driver).click(driver.find_element_by_id('search-button')).perform()
    time.sleep(1)

    time.sleep(3)

    driver.quit()


if __name__ == "__main__":
    foo1()